#include "BlockStoreStateWidget.h"
#include <QHeaderView>
#include <QApplication>

BlockStoreStateWidget::BlockStoreStateWidget(QWidget *parent)
    : QWidget(parent)
    , m_tableView(nullptr)
    , m_customHeader(nullptr)
    , m_model(nullptr)
    , m_delegate(nullptr)
    , m_totalCountLabel(nullptr)
    , m_upperMoldLabel(nullptr)
    , m_movableTypeLabel(nullptr)
{
    setupUI();
}

BlockStoreStateWidget::~BlockStoreStateWidget()
{
}

void BlockStoreStateWidget::setupUI()
{
    // 创建主布局
    QVBoxLayout *mainLayout = new QVBoxLayout(this);
    mainLayout->setSpacing(10);
    mainLayout->setContentsMargins(10, 10, 10, 10);


    // 创建表格视图
    setupTableView();
    mainLayout->addWidget(m_tableView);

    // 连接信号槽
    connect(m_model, &BlockStoreModel::dataChanged, this, &BlockStoreStateWidget::updateTotalCount);
    
    // 初始化总数量
    updateTotalCount();
}

void BlockStoreStateWidget::setupTableView()
{
    // 创建模型和代理
    m_model = new BlockStoreModel(this);
    m_delegate = new BlockStoreDelegate(this);
    
    // 创建表格视图
    m_tableView = new QTableView(this);
    m_tableView->setModel(m_model);
    m_tableView->setItemDelegate(m_delegate);
    
    // 设置表格属性
    m_tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
    m_tableView->setSelectionMode(QAbstractItemView::NoSelection);
    m_tableView->setShowGrid(true);
    m_tableView->setGridStyle(Qt::SolidLine);
    m_tableView->setAlternatingRowColors(false);
    
    // 创建自定义表头
    m_customHeader = new CustomHeaderView(Qt::Horizontal, m_tableView);
    m_tableView->setHorizontalHeader(m_customHeader);
    
    // 隐藏左侧表头
    m_tableView->verticalHeader()->setVisible(false);
    
    // 设置列宽
    m_tableView->horizontalHeader()->setDefaultSectionSize(90);
    m_tableView->verticalHeader()->setDefaultSectionSize(40);
    m_tableView->setStyleSheet(R"(
        QTableView {
            gridline-color: transparent;
        }
    )");
    
}

void BlockStoreStateWidget::setBlockStatus(int blockNumber, BlockStoreModel::BlockStatus status)
{
    if (m_model) {
        m_model->setBlockStatus(blockNumber, status);
    }
}

BlockStoreModel::BlockStatus BlockStoreStateWidget::getBlockStatus(int blockNumber) const
{
    if (m_model) {
        return m_model->getBlockStatus(blockNumber);
    }
    return BlockStoreModel::Unavailable;
}

void BlockStoreStateWidget::resetAllBlocks()
{
    if (m_model) {
        m_model->resetAllBlocks();
    }
}

int BlockStoreStateWidget::getTotalAvailableCount() const
{
    if (m_model) {
        return m_model->getTotalAvailableCount();
    }
    return 0;
}

void BlockStoreStateWidget::updateTotalCount()
{
    if (m_totalCountLabel) {
        int count = getTotalAvailableCount();
        m_totalCountLabel->setText(QString("总数量 %1").arg(count));
    }
}
